import { getUserDetailById, getUserInfo, login } from '@/api/user'
import { getToken, setTimeStamp, setToken, removeToken } from '@/utils/auth'
import { Message } from 'element-ui'
import { resetRouter } from '@/router'
export default {
  namespaced: true,
  state: {
    // token: ''
    token: getToken(),
    userInfo: {}
  },
  mutations: {
    // 修改token的mutations
    setToken(state, data) {
      state.token = data
      setToken(data)
    },
    // 删除token：
    // removeToken(state) 这是自己设置的mutations的名字：
    // 第二个才是引用auth里的那个函数
    removeToken(state) {
      state.token = ''
      removeToken()
    },
    setUserInfo(state, data) {
      state.userInfo = data
    },
    // 删除userinfo：
    removeUserInfo(state) {
      // state.userInfo = ''   是空的对象！！不是空的字符串！！
      state.userInfo = {}
    }
  },
  actions: {
    login(context, data) {
      // 一定要return！！！不然的话，容易卡一次！再进入主页！太麻烦了
      // login(data).then(data => {
      return login(data).then(data => {
        // 1. 弹窗
        Message.success('登录成功')
        // 2. 调用 mutations
        context.commit('setToken', data)
        // 登录之后获取时间戳：
        setTimeStamp()
      })
    },
    // getUsrInfo(context, data) {
    //   return getUserInfo().then(() => {
    //     context.commit('setUserInfo', data)
    //   })
    // }   错误！！   // 这个获取用户信息的 action, 其实返回一个 api/user 里面封装的请求函数
    // getUserInfo(context) {
    //   // 如果不return的话；就会先执行·then里面的函数哦！！因为是异步的！！所以需要return出去
    //   return getUserInfo().then((data) => {
    //     console.log('在action里获取数据')
    //     // 调用 mutations 将数据存入 state 随时使用
    //     context.commit('setUserInfo', data)
    //     console.log(data)
    //   })
    // }
    'getUserInfo': async(context) => {
      // 先发送基本的用户信息请求：

      const dataUserInfo = await getUserInfo()
      const dataUserDetail = await getUserDetailById(dataUserInfo.userId) // 这里一定要传参！！
      const userInfo = {
        ...dataUserInfo,
        ...dataUserDetail
      }
      context.commit('setUserInfo', userInfo)
      // 之前仅仅获取完信息, 存入state,
      // 现在因为其他的文件(路由守卫)需要用这个数据
      // console.log('这里是store', userInfo)
      return userInfo
    },
    // 创建登出功能：
    logout({ commit }) {
      // const { commit } = context
      commit('removeToken')
      commit('removeUserInfo')
      // 还需要清空前一个页面所产生的路由配置：
      resetRouter()
      // 还应该删除导航栏的配置
      commit('permission/setRoutes', [], {
        // 如果要调用其他页面的mutations，必须设置root为true！
        root: true
      })
    }
  }
}

